package Schach;
import java.awt.*;
import java.awt.event.*;
import javax.swing.*;

class Feld extends JButton{

    int x;
    int y;

    Feld(){
        super();
    }

    Feld(int x, int y){
        super();
        this.x = x;
        this.y = y;
    }

}

public class gui
{
    final static Feld[][] spielfeld = new Feld[8][8];

    public static Icon bauerWeiss = new ImageIcon("C:/images/schachfiguren/bauerWeiss.png");
    public static Icon turmWeiss = new ImageIcon("C:/images/schachfiguren/turmWeiss.png");
    public static Icon springerWeiss = new ImageIcon("C:/images/schachfiguren/springerWeiss.png");
    public static Icon laeuferWeiss = new ImageIcon("C:/images/schachfiguren/laeuferWeiss.png");
    public static Icon dameWeiss = new ImageIcon("C:/images/schachfiguren/dameWeiss.png");
    public static Icon kingWeiss = new ImageIcon("C:/images/schachfiguren/kingWeiss.png");
    public static Icon bauerSchwarz = new ImageIcon("C:/images/schachfiguren/bauerSchwarz.png");
    public static Icon turmSchwarz = new ImageIcon("C:/images/schachfiguren/turmSchwarz.png");
    public static Icon springerSchwarz = new ImageIcon("C:/images/schachfiguren/springerSchwarz.png");
    public static Icon laeuferSchwarz = new ImageIcon("C:/images/schachfiguren/laeuferSchwarz.png");
    public static Icon dameSchwarz = new ImageIcon("C:/images/schachfiguren/dameSchwarz.png");
    public static Icon kingSchwarz = new ImageIcon("C:/images/schachfiguren/kingSchwarz.png");

    public static Icon bauerWeissDark = new ImageIcon("C:/images/schachfiguren/bauerWeissDark.png");
    public static Icon turmWeissDark = new ImageIcon("C:/images/schachfiguren/turmWeissDark.png");
    public static Icon springerWeissDark = new ImageIcon("C:/images/schachfiguren/springerWeissDark.png");
    public static Icon laeuferWeissDark = new ImageIcon("C:/images/schachfiguren/laeuferWeissDark.png");
    public static Icon dameWeissDark = new ImageIcon("C:/images/schachfiguren/dameWeissDark.png");
    public static Icon kingWeissDark = new ImageIcon("C:/images/schachfiguren/kingWeissDark.png");
    public static Icon bauerSchwarzDark = new ImageIcon("C:/images/schachfiguren/bauerSchwarzDark.png");
    public static Icon turmSchwarzDark = new ImageIcon("C:/images/schachfiguren/turmSchwarzDark.png");
    public static Icon springerSchwarzDark = new ImageIcon("C:/images/schachfiguren/springerSchwarzDark.png");
    public static Icon laeuferSchwarzDark = new ImageIcon("C:/images/schachfiguren/laeuferSchwarzDark.png");
    public static Icon dameSchwarzDark = new ImageIcon("C:/images/schachfiguren/dameSchwarzDark.png");
    public static Icon kingSchwarzDark = new ImageIcon("C:/images/schachfiguren/kingSchwarzDark.png");

    static void aufstellung(Figur[][] feld, Feld[][] spielfeld){
        for (int i=0; i<8; i++){
            for (int j=0; j<8; j++){
                if (feld[i][j]!=null){
                    if (feld[i][j].c.equals("w")){
                        if (feld[i][j].type.equals(".")){
                            if (i%2==j%2) spielfeld[i][7-j].setIcon(bauerWeiss);
                            else spielfeld[i][7-j].setIcon(bauerWeissDark);
                        } else if(feld[i][j].type.equals("T")){
                            if (i%2==j%2) spielfeld[i][7-j].setIcon(turmWeiss);
                            else spielfeld[i][7-j].setIcon(turmWeissDark);
                        } else if(feld[i][j].type.equals("S")){
                            if (i%2==j%2) spielfeld[i][7-j].setIcon(springerWeiss);
                            else spielfeld[i][7-j].setIcon(springerWeissDark);
                        } else if(feld[i][j].type.equals("L")){
                            if (i%2==j%2) spielfeld[i][7-j].setIcon(laeuferWeiss);
                            else spielfeld[i][7-j].setIcon(laeuferWeissDark);
                        } else if(feld[i][j].type.equals("D")){
                            if (i%2==j%2) spielfeld[i][7-j].setIcon(dameWeiss);
                            else spielfeld[i][7-j].setIcon(dameWeissDark);
                        } else if(feld[i][j].type.equals("K")){
                            if (i%2==j%2) spielfeld[i][7-j].setIcon(kingWeiss);
                            else spielfeld[i][7-j].setIcon(kingWeissDark);
                        }
                    } else {
                        if (feld[i][j].type.equals(".")){
                            if (i%2==j%2) spielfeld[i][7-j].setIcon(bauerSchwarz);
                            else spielfeld[i][7-j].setIcon(bauerSchwarzDark);
                        } else if(feld[i][j].type.equals("T")){
                            if (i%2==j%2) spielfeld[i][7-j].setIcon(turmSchwarz);
                            else spielfeld[i][7-j].setIcon(turmSchwarzDark);
                        } else if(feld[i][j].type.equals("S")){
                            if (i%2==j%2) spielfeld[i][7-j].setIcon(springerSchwarz);
                            else spielfeld[i][7-j].setIcon(springerSchwarzDark);
                        } else if(feld[i][j].type.equals("L")){
                            if (i%2==j%2) spielfeld[i][7-j].setIcon(laeuferSchwarz);
                            else spielfeld[i][7-j].setIcon(laeuferSchwarzDark);
                        } else if(feld[i][j].type.equals("D")){
                            if (i%2==j%2) spielfeld[i][7-j].setIcon(dameSchwarz);
                            else spielfeld[i][7-j].setIcon(dameSchwarzDark);
                        } else if(feld[i][j].type.equals("K")){
                            if (i%2==j%2) spielfeld[i][7-j].setIcon(kingSchwarz);
                            else spielfeld[i][7-j].setIcon(kingSchwarzDark);
                        }
                    }
                } else spielfeld[i][7-j].setIcon(null);
            }
        }
    }

    public static void start()
    {
        final JFrame frameFeld = new JFrame();
        frameFeld.setDefaultCloseOperation( JFrame.EXIT_ON_CLOSE );
        frameFeld.setResizable(false);


        final JLabel moveStart = new JLabel("Start: ");
        moveStart.setForeground(Color.BLACK);
        moveStart.setBounds(20, 5, 150, 20);
        moveStart.setVisible(true);
        frameFeld.add(moveStart);

        final JLabel start = new JLabel("");
        frameFeld.add(start);

        final JLabel moveZiel = new JLabel("Ziel: ");
        moveZiel.setForeground(Color.BLACK);
        moveZiel.setBounds(20, 25, 150, 20);
        moveZiel.setVisible(true);
        frameFeld.add(moveZiel);

        final JLabel labelAmZug = new JLabel();
        labelAmZug.setForeground( Color.BLACK );
        labelAmZug.setBounds(100, 15, 200, 20);
        labelAmZug.setVisible(true);
        labelAmZug.setText("weiss am Zug");
        frameFeld.add( labelAmZug );

        final JLabel check = new JLabel();
        check.setForeground( Color.RED );
        check.setBounds(200, 15, 300, 20);
        check.setVisible(true);
        check.setText("");
        frameFeld.add(check);

        for (int i = 1; i<=8; i++){
            for (int j=1; j<=8; j++){
                final Feld feld = new Feld(i,j);
                if (i%2 == j%2) feld.setBackground(Color.BLACK);
                else feld.setBackground(Color.WHITE);
                frameFeld.add(feld);
                spielfeld[i-1][j-1] = feld;
                feld.setSize(50, 50);
                feld.setLocation(50*i, 50*j);
                feld.addActionListener( new ActionListener() {
                    @Override public void actionPerformed( ActionEvent e ) {
                        String field="";
                        switch (feld.x){
                            case 1 :    field = "A";
                                        break;
                            case 2 :    field = "B";
                                        break;
                            case 3 :    field = "C";
                                        break;
                            case 4 :    field = "D";
                                        break;
                            case 5 :    field = "E";
                                        break;
                            case 6 :    field = "F";
                                        break;
                            case 7 :    field = "G";
                                        break;
                            case 8 :    field = "H";
                                        break;
                        }
                        field += 9-feld.y;
                        if (moveStart.getText().equals("Start: ") || !moveZiel.getText().equals("Ziel: "))
                        {
                            moveStart.setText("Start: ");
                            moveZiel.setText("Ziel: ");
                                start.setText(String.valueOf(feld.x) + String.valueOf(feld.y));
                                moveStart.setText(moveStart.getText()+field);
                        }
                        else {
                            int x1 = Integer.parseInt(start.getText().substring(0, 1));
                            int y1 = 9 - Integer.parseInt(start.getText().substring(1));
                            int x2= feld.x;
                            int y2= 9 - feld.y;
                            moveZiel.setText("Ziel: "+field);
                            if (Main.move(x1, y1, x2, y2, labelAmZug.getText().substring(0, 1))){
                                labelAmZug.setText(labelAmZug.getText().substring(0, 1)
                                        .equals("w")? "schwarz am Zug" : "weiss am Zug");
                                
                                if (action.checkcheck(Main.Feld, labelAmZug.getText().substring(0, 1))){
                                    if (action.checkcheckmate(Main.Feld, labelAmZug.getText().substring(0, 1))){
                                        
                                        check.setText(labelAmZug.getText().substring(0, 1)
                                        .equals("w")? "Weiss ist schachmatt!! Schwarz gewinnt!" :
                                            "Schwarz ist schachmatt!! Weiss gewinnt!");

                                    } else check.setText(labelAmZug.getText().substring(0, 1)
                                        .equals("s")? "Weiss sagt Schach!" : "Schwarz sagt Schach!");

                                } else check.setText("");
                            } else {
                                moveStart.setText("Start: ");
                                moveZiel.setText("Ziel: ");
                            }
                            Main.printfield();
                            aufstellung(Main.Feld, spielfeld);
                        }
                    }
                } );
            }
        }
        
        aufstellung(Main.Feld, spielfeld);

        frameFeld.setBounds(50, 50, 500, 500);
        JButton bg = new JButton();
        frameFeld.add(bg);
        bg.setVisible(false);
        frameFeld.setBackground(Color.BLACK);

        frameFeld.setVisible( true );
    }
}
